package com.shrcl.engineerprocess.domain;

import com.shrcl.engineerprocess.domain.Engineer;
import com.shrcl.engineerprocess.domain.EngineerTrainingStatus;
import com.shrcl.engineerprocess.domain.impl.EngineerTrainingImpl;
import com.shrcl.engineerprocess.domain.proxy.EngineerTrainingProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;

@EntityImplementation(implementBy = EngineerTrainingImpl.class)
public interface EngineerTraining extends IModelObject {
  public abstract String getTrainer();
  
  public abstract EngineerTraining setTrainer(final String trainer);
  
  public abstract String getName();
  
  public abstract EngineerTraining setName(final String name);
  
  public abstract String getTopic();
  
  public abstract EngineerTraining setTopic(final String topic);
  
  public abstract String getLocation();
  
  public abstract EngineerTraining setLocation(final String location);
  
  public abstract Date getStartdate();
  
  public abstract EngineerTraining setStartdate(final Date startdate);
  
  public abstract Date getEnddate();
  
  public abstract EngineerTraining setEnddate(final Date enddate);
  
  public abstract Collection<Engineer> getTrainees();
  
  public abstract EngineerTraining addtoTrainees(final Engineer engineer);
  
  public abstract EngineerTraining setTrainees(final Iterable<Engineer> trainees);
  
  public abstract EngineerTraining removeFromTrainees(final Engineer engineer);
  
  public abstract EngineerTraining removeAllTrainees();
  
  public abstract Integer getFirstRemindAdvancedDay();
  
  public abstract EngineerTraining setFirstRemindAdvancedDay(final Integer firstRemindAdvancedDay);
  
  public abstract Integer getSecondRemindAdvancedDay();
  
  public abstract EngineerTraining setSecondRemindAdvancedDay(final Integer secondRemindAdvancedDay);
  
  public abstract void performTrainingNotification();
  
  public abstract EngineerTrainingStatus getStatus();
  
  public abstract void start();
  
  public abstract void notifyTrainee();
  
  public abstract void firstNotifyTimer();
  
  public abstract void secondNotifyTimer();
  
  public abstract void finish();
  
  public abstract Boolean isCreated();
  
  public abstract Boolean isFirstNotified();
  
  public abstract Boolean isSecondNotified();
  
  public abstract Boolean isFinished();
  
  public abstract EngineerTrainingProxy toProxy();
}
